#ifndef _SCENEMANAGER_H
#define _SCENEMANAGER_H

#include <vector>
#include <map>
#include <string>

#include "Scene.h"
#include "GameInfo.h"

#ifdef GALLIUMENGINE_DLL 
#define GALLIUMENGINE_API __declspec( dllexport )
#else
#define GALLIUMENGINE_API __declspec( dllimport )
#endif

namespace GalliumEngine
{

	class Scene;

	class SceneManager :  public Singleton<SceneManager>
	{
	private:
		typedef std::map<std::string,Scene*> scenes_map;
		typedef scenes_map::iterator scenes_map_itr;
		typedef scenes_map::const_iterator scenes_map_const_itr;
		typedef std::pair<std::string,Scene*> scenes_pair;

		scenes_map scenes;
		Scene* activeScene;
	public:
		GALLIUMENGINE_API SceneManager(void);
		GALLIUMENGINE_API ~SceneManager(void);
		GALLIUMENGINE_API void initialize();
		GALLIUMENGINE_API void deinitialize();
		GALLIUMENGINE_API void AddScene(Scene* scene);
		GALLIUMENGINE_API Scene* GetActiveScene();
		GALLIUMENGINE_API void SceneManager::switchScreen(std::string scene);
		GALLIUMENGINE_API Scene* SceneManager::getScene(std::string scene);
		GALLIUMENGINE_API void update(float delta);
		GALLIUMENGINE_API void draw();
	};

}

#endif